package com.agileboot.attendance.domain.project.dto;

import cn.hutool.core.util.StrUtil;
import com.agileboot.attendance.domain.project.entity.AttProjectEntity;
import com.agileboot.common.core.page.PageQuery;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * 项目查询对象
 *
 * @author ruoyi
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("项目查询对象")
public class ProjectQuery extends PageQuery<AttProjectEntity> {

    /**
     * 项目名称
     */
    @ApiModelProperty(value = "项目名称")
    private String projectName;

    /**
     * 项目编码
     */
    @ApiModelProperty(value = "项目编码")
    private String projectCode;

    /**
     * 项目状态（0规划中、1进行中、2已完成、3已关闭）
     */
    @ApiModelProperty(value = "项目状态（0规划中、1进行中、2已完成、3已关闭）")
    private String status;

    /**
     * 开始日期范围-开始
     */
    @ApiModelProperty(value = "开始日期范围-开始")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String beginStartDate;

    /**
     * 开始日期范围-结束
     */
    @ApiModelProperty(value = "开始日期范围-结束")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String endStartDate;

    /**
     * 结束日期范围-开始
     */
    @ApiModelProperty(value = "结束日期范围-开始")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String beginEndDate;

    /**
     * 结束日期范围-结束
     */
    @ApiModelProperty(value = "结束日期范围-结束")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String endEndDate;

    /**
     * 构建项目查询条件
     *
     * @return 查询条件包装器
     */
    public LambdaQueryWrapper<AttProjectEntity> buildQueryWrapper() {
        LambdaQueryWrapper<AttProjectEntity> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StrUtil.isNotEmpty(projectName), AttProjectEntity::getProjectName, projectName)
                .eq(StrUtil.isNotEmpty(projectCode), AttProjectEntity::getProjectCode, projectCode)
                .eq(StrUtil.isNotEmpty(status), AttProjectEntity::getStatus, status);
                
        // 修改查询逻辑：项目的日期范围必须在用户选择的日期范围内
        // 条件1: 项目开始日期 >= 用户选择的开始日期
        if (StrUtil.isNotEmpty(beginStartDate)) {
            queryWrapper.ge(AttProjectEntity::getStartDate, beginStartDate);
        }
        
        // 条件2: 项目结束日期 <= 用户选择的结束日期
        if (StrUtil.isNotEmpty(endEndDate)) {
            queryWrapper.le(AttProjectEntity::getEndDate, endEndDate);
        }
        
        queryWrapper.eq(AttProjectEntity::getDeleted, false) // 使用基类的deleted字段
                .orderByDesc(AttProjectEntity::getCreateTime);

        return queryWrapper;
    }
}
